package main;
/**
 * 主要用于实现和窗口有关的功能
 * **/

import java.awt.*;
import java.awt.event.MouseEvent;//鼠标触发事件
import java.awt.event.MouseListener;//鼠标监听事件

import javax.swing.*;

public class Windows extends JFrame implements MouseListener {
    /**
     * 使用implement实现多个接口的“多继承”,使Windows类同时具有画图、鼠标监视、自定义的其他的功能
     * **/
    public Core cc;
    private int bb = 1;
    public Windows(String title) {
        super(title);//调用Windows父类JFrame中的构造函数，用于显示窗口名字
        cc = new Core(15, 15);        //初始化cc
        this.setSize(620, 485);//设置窗口大小为750*550
        this.setLocation(250, 100);     //设置窗口位置（坐标空间中的 x 和 y 参数来指定新位置的左上角）
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口后完全终止程序的运行
        this.setVisible(true);                //使窗口可视化
        this.addMouseListener(this);        //添加鼠标监视器
        /**
         * 设定窗口左上角坐标
         * 设置窗口大小
         * 设置窗口位置(左上角坐标)
         * 使窗口可视化
         * 添加鼠标监视器**/
    }

    @Override
    public void paint(Graphics g) {//画棋盘
        // TODO Auto-generated method stub
        super.paint(g);//在原来图像的基础上画图
        // 横
        for (int i = 0; i < 15; i++)
            //画横线，此处(x1,y1)(x2,y2)分别代表左下角和右上角的坐标
            g.drawLine(30, 30 + i * 30, 450, 30 + i * 30);//左下角到右上角坐标画横线
        // 竖线
        for (int i = 0; i < 15; i++)
            g.drawLine(30 + i * 30, 60, 30 + i * 30, 450);//左下角坐标到右上角坐标画竖线

        int[][] board = cc.getCore();
        for (int i = 0; i < 15; i++) {
            for (int j = 0; j < 15; j++) {
                if (board[i][j] == 1)//绘制一个能包含住一矩形的圆，前2个是坐标值，后2个是该图形的宽度和高度
                    g.drawOval(20 + i * 30, 50 + j * 30, 20, 20);//画圈[1是白棋]

                if(board[i][j]==2)
                    g.fillOval(20 + i * 30, 50 + j * 30, 20, 20);//画实心圆[2是黑棋]
            }
        }
        g.drawRect(490,65,45,25);
        g.drawString("悔棋",500,80);//设置该按钮显示悔棋的内容,字体坐标(700,800)

        g.drawRect(490,125,45,25);
        g.drawString("开始",500,140);

        g.drawRect(490,185,90,25);
        g.drawString("设置落子先后",500,200);

        g.drawRect(490,245,90,25);
        g.drawString("充5毛支持作者",500,260);

        g.drawString("选好落子顺序就可以开战了！",455,320);
    }

    @Override
    public void mouseClicked(MouseEvent arg0) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mousePressed(MouseEvent e) {/**鼠标点击事件**/
        // TODO Auto-generated method stub
        if (e.getX() < 450 && e.getY() < 450) {//使鼠标得到的横纵坐标不超过棋盘画线区域
            int a = cc.ChessIt(PogetX(e.getX()), (PogetY(e.getY())), bb);//使用是否能在此处下棋的函数，能下就返回数值，不能下就返回-1
            this.repaint();
            if (a == 1) {
                ///如果白色棋子五子连珠，则调用一个文本框提示白方胜
                JOptionPane.showMessageDialog(null, "白胜", "恭喜", JOptionPane.DEFAULT_OPTION);;
                //https://blog.csdn.net/tjk123456/article/details/77868034 Java中不同种类的提示框
            }
            if(a==2) {
                ///如果黑色棋子五子连珠，则调用一个文本框提示黑方胜
                JOptionPane.showMessageDialog(null,"黑胜", "恭喜", JOptionPane.DEFAULT_OPTION);;
            }
            if(a!=-1) {
                if(bb==1) bb=2;
                else if(bb==2) bb=1;
            }
        }
        else if(e.getX()>490&&e.getX()<560&&e.getY()>60&&e.getY()<90) {//设置悔棋的按钮功能
            cc.HuiQi();
            if(bb==1) bb=2;
            else if(bb==2) bb=1;
            this.repaint();
        }
        if(e.getX()>490&&e.getX()<560&&e.getY()>120&&e.getY()<150) {//重新开始的按钮
            cc.Restart();
            this.repaint();
        }
        if(e.getX()>490&&e.getX()<580&&e.getY()>180&&e.getY()<210) {//设置白先还是黑先
            Object[] options = {"白先","黑先"};
            int n = JOptionPane.showOptionDialog(null,"白先还是黑先？","游戏设置",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE, null,options,options[0]);
            if(n==0) this.bb=1;
            if(n==1) this.bb=2;
            this.cc.Restart();
            this.repaint();
        }
        if(e.getX()>490&&e.getX()<580&&e.getY()>240&&e.getY()<270){
            JOptionPane.showInputDialog(null, "真是太感谢了！", "如果你觉得这游戏不错也可以支持一下作者", 0, new ImageIcon("2344.jpg"), null, "这没什么大不了的！");
        }

    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    private int PogetX(int x) {
        x -= 30;
        if (x % 15 <= 7)
            return x / 30;
        else
            return x / 30 + 1;
    }

    private int PogetY(int y) {
        y -= 60;
        if (y % 15 <= 7)
            return y / 30;
        else
            return y / 30 + 1;
    }
}